// outputconfigwidget.h
#ifndef OUTPUTCONFIGWIDGET_H
#define OUTPUTCONFIGWIDGET_H

#include <QWidget>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QJsonValue>
#include "remotetab.h"

namespace Ui
{
    class outputConfigWidget;
}

class outputConfigWidget : public QWidget
{
    Q_OBJECT

public:
    explicit outputConfigWidget(QWidget *parent = nullptr);
    ~outputConfigWidget();
    bool processJsonCommand(const QString &jsonStr, QString *err); // 解析json命令并处理,返回err

    // 添加获取所有参数的方法
    QJsonObject getAllParameters() const;

private:
    Ui::outputConfigWidget *ui;
    int m_permissionLevel = 0;                   // 权限等级，0表示普通用户，1表示管理员等
    bool initialized = false;                    // 添加初始化标志
    QMap<QString, QString> m_modbusDataMap;      // 以modbusAddr为key，data为value的映射
    QStringList m_networkDevices;                // 网络设备列表
    QMap<QString, QJsonObject> m_networkConfigs; // 网络设备配置映射
    void applyNetworkConfigOnStartup();          // 应用启动时的网络配置
    void loadNetworkConfigs(const QJsonObject &pluginRemote);
    void saveNetworkConfigs(QJsonObject &pluginRemote) const;
    QStringList getAvailableNetworkDevices();
    void updateTabNetworkConfigs(remoteTab *tab); // 更新标签页的网络配置信息
    void updateNetworkConfigDisplay(const QString &deviceName);

    QStringList m_addedRoutes;        // 记录已添加的路由
    void loadRouteRecords();          // 从文件加载路由记录
    void saveRouteRecords();          // 保存路由记录到文件
    void deleteAllRecordedRoutes();   // 删除所有记录的路由
    void manageHostRoutes();          // 管理主机路由
    void applyLoadedNetworkConfigs(); // 应用加载的网络配置
signals:
    void signalToForward(const QString &msg);

private slots:
    void on_pb_addTab_clicked();
    void on_pb_deleteTab_clicked();
    void on_pb_saveTab_clicked(); // 实现这个函数
    void onTabNameChanged(const QString &name);
    // void onNetworkDeviceChanged(const QString &deviceName); // 网卡选择变化时的处理
    // 新增初始化函数
    void initializeFromRemoteJson();
    void on_cb_connectType_currentIndexChanged(int index);
    void on_pb_netSave_clicked();
    void on_pb_timeSave_clicked();
    void on_pb_databaseEmpty_clicked();
};

#endif // OUTPUTCONFIGWIDGET_H
